#ifndef _BUZZ_BOARD_H_
#define _BUZZ_BOARD_H_

#include <config.h>
#include <stdbool.h>

#if _VOICE_PLAY_TYPE_ == _VOICE_PLAY_BUZZ_
#if _BOARD_TYPE_ == _V31_A_BOARD_
// 蜂鸣器
#define BASIC_BUZZ_PIN                  GPIO_Pin_14
// 呼吸灯信道
#define BASIC_BUZZ_PWM_CHANNEL          CH_PWM10

#elif _BOARD_TYPE_ == _V32_A_BOARD_
// 蜂鸣器
#define BASIC_BUZZ_PIN                  GPIO_Pin_12
// 呼吸灯信道
#define BASIC_BUZZ_PWM_CHANNEL          CH_PWM4

#elif _BOARD_TYPE_ == _V32_B_BOARD_
// 蜂鸣器
#define BASIC_BUZZ_PIN                  GPIO_Pin_3
// 呼吸灯信道
#define BASIC_BUZZ_PWM_CHANNEL          CH_PWM9

#elif _BOARD_TYPE_ == _DA01_A_BOARD_
// 蜂鸣器
#define BASIC_BUZZ_PIN                  GPIO_Pin_0
// 呼吸灯信道
#define BASIC_BUZZ_PWM_CHANNEL          CH_PWM6

#elif _BOARD_TYPE_ == _EC01_BOARD_
// 蜂鸣器
#define BASIC_BUZZ_PIN                  GPIO_Pin_3 //PB3
// 呼吸灯信道
#define BASIC_BUZZ_PWM_CHANNEL          CH_PWM9
#endif

/* 系统音量等级 0 - 15 */
// 最小音量
#define BUZZ_MIN_VOLUME_LEVEL                           0
// 等大音量
#define BUZZ_MAX_VOLUME_LEVEL                           15

typedef enum
{
  BUZZ_SOUND_LISTER = 1 << 0, // 蜂鸣器监听
} BuzzTypeOfEvent_t;

typedef void (*BuzzSoundEventTask_t)(void);

/**
 * @brief 外部调用方法
 *
 */
typedef struct
{
  BuzzSoundEventTask_t SoundEventTask;
} BuzzExternalInterfaces_t;

/**
 * @brief 设置蜂鸣器管脚电平
 *
 * @param PinLevel - 管脚电平（true：高电平 false：低电平）
 */
extern void SetBuzzPinLevel(bool PinLevel);

/**
 * @brief 设置设备繁忙标识
 *
 * @param Status - 繁忙标识（true：繁忙 false：空闲）
 */
extern void BuzzSetBusyStatus(bool Status);

/**
 * @brief 获取免打扰标识
 *
 * @return bool - 使能位（true：打开 false：关闭）
 */
extern bool BuzzGetDoNotDisturbFlag(void);

/**
 * @brief 停止蜂鸣器播放音频任务
 *
 */
extern void BuzzStopPlaySoundTask(void);

/**
 * @brief 延时启动蜂鸣器播放音频任务
 *
 * @param Ms - 延时的时间
 */
extern void BuzzDelayedStartPlaySoundTask(uint32_t Ms);

/**
 * @brief 立即启动蜂鸣器播放音频任务
 *
 */
extern void BuzzStartPlaySoundTaskNoWait(void);

/**
 * @brief 蜂鸣器板载功能初始化
 *
 * @param pExternalInterfaces - 外部调用方法
 */
extern void BuzzBoardInitialisation(BuzzExternalInterfaces_t *pExternalInterfaces);

#endif
#endif
